package 排序;

import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;

/*
* 给定一位研究者论文被引用次数的数组（被引用次数是非负整数）。编写一个方法，计算出研究者的 h 指数。

h 指数的定义：h 代表“高引用次数”（high citations），一名科研人员的 h 指数是指他（她）的 （N 篇论文中）总共有 h 篇论文分别被引用了至少 h 次。（其余的 N - h 篇论文每篇被引用次数 不超过 h 次。）

例如：某人的 h 指数是 20，这表示他已发表的论文中，每篇被引用了至少 20 次的论文总共有 20 篇。

 

示例：

输入：citations = [3,0,6,1,5]
输出：3
解释：给定数组表示研究者总共有 5 篇论文，每篇论文相应的被引用了 3, 0, 6, 1, 5 次。
     由于研究者有 3 篇论文每篇 至少 被引用了 3 次，其余两篇论文每篇被引用 不多于 3 次，所以她的 h 指数是 3。
我们想象一个直方图，其中 xx 轴表示文章，yy 轴表示每篇文章的引用次数。如果将这些文章按照引用次数降序排序并在直方图上进行表示，那么直方图上的最大的正方形的边长 hh 就是我们所要求的 hh。

*
* 总结：找规律 主要还是看思路  可以简化成 找一组数中符合条件的最大的数n  条件是要有n个数大于n
* 思路是倒序 然后从最大的开始找 和i比较 i每次++  就是n要符合两个条件 那就从一个能符合的从头开始找 直到另外一个也符合
* 少用api提供的东西 尤其是类型之间的转换
*
* */
public class H指数 {
    public static void main(String[] args) {
        Integer[] citations = {3,1,4,6,5,2,7};
//        Arrays.sort(citations);
//        // 线性扫描找出最大的 i
//        int i = 0;
//        while (i < citations.length && citations[citations.length - 1 - i] > i) {
//            i++;
//        }
//        System.out.println(i);


        class Solution {
            //最多只有n篇也就是数组的大小
            //升序 从第一个检测是否符合 不符合就缩小
            public int hIndex(int[] citation) {

                int h=citation.length;
                for(int i=0;i<citation.length;i++){
                    if(citation[i]<h){
                        h--;
                    }
                }
                return h;
            }
        }

    }
}
